package ma.ensao.egicom.bank.services.model;

import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.scub.foundation.framework.core.model.BaseModel;

/**
 * Entit&eacute; persistante modilisant une carte de cr&eacute;dit.
 * @author MILHI Yassine (milhi.yassinee@gmail.com)
 */
@Entity
@Table(name = "creditCard")
public class CreditCard extends BaseModel {

    private static final long serialVersionUID = 5608524371460046724L;

    @Column(nullable = false)
    private String number;

    @Column(nullable = false)
    private Calendar expirationDate;

    @Column(nullable = false)
    private String cvc;

    @ManyToOne(fetch = FetchType.LAZY)
    private Account account;

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean equals(Object other) {
        if (other == null || !(other instanceof CreditCard)) {
            return false;
        }
        return equalsUtil(other);
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    /**
     * Retourne le compte associ&eacute; à cette carte.
     * @return le compte associ&eacute; à cette carte.
     */
    public Account getAccount() {
        return account;
    }

    /**
     * Modifie le compte assici&eacute; à cette carte.
     * @param account le compte assici&eacute; à cette carte
     */
    public void setAccount(Account account) {
        this.account = account;
    }

    /**
     * Retourne le num&eacute;ro de la carte de cr&eacute;dit.
     * @return le num&eacute;ro de la carte de cr&eacute;dit
     */
    public String getNumber() {
        return number;
    }

    /**
     * Modifie le num&eacute;ro de la carte de cr&eacute;dit.
     * @return le num&eacute;ro de la carte de cr&eacute;dit
     */
    public void setNumber(String number) {
        this.number = number;
    }

    /**
     * Modifie le num&eacute;ro de la carte de cr&eacute;dit.
     * @param number le num&eacute;ro de la carte de cr&eacute;dit.
     */
    public void setNom(String number) {
        this.number = number;
    }

    /**
     * Modifie le num&eacute;ro de la carte de cr&eacute;dit.
     * @param number le num&eacute;ro de la carte de cr&eacute;dit.
     */
    public void getNom(String number) {
        this.number = number;
    }

    /**
     * Retourne la date d'expiration de la carte de cr&eacute;dit.
     * @return la date d'expiration de la carte de cr&eacute;dit
     */
    public Calendar getExpirationDate() {
        return expirationDate;
    }

    /**
     * Modifie la date d'expiration de la carte de cr&eacute;dit.
     * @param expirationDate la date d'expiration de la carte de cr&eacute;dit
     */
    public void setExpirationDate(Calendar expirationDate) {
        this.expirationDate = expirationDate;
    }

    /**
     * Retourne le num&eacute;ro de contr&ocirc;le de la carte de cr&eacute;dit.
     * @return le num&eacute;ro de contr&ocirc;le de la carte de cr&eacute;dit
     */
    public String getCvc() {
        return cvc;
    }

    /**
     * Modifie le num&eacute;ro de contr&ocirc;le de la carte de cr&eacute;dit.
     * @param cvc le num&eacute;ro de contr&ocirc;le de la carte de cr&eacute;dit
     */
    public void setCvc(String cvc) {
        this.cvc = cvc;
    }
}
